package fun.shuofeng.juc.atomic;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.IntBinaryOperator;
import java.util.function.IntUnaryOperator;

public class AtomicIntegerDemo01 {
    public static void main(String[] args) {
        AtomicInteger i = new AtomicInteger(1);

        // 获取并自增 类似于i++ 结果2 返回1
        System.out.println(i.getAndIncrement());
        // 自增并获取 类似于++i 结果3 返回3
        System.out.println(i.incrementAndGet());

        // 获取并加值 类似于先i+3 结果6 返回3
        System.out.println(i.getAndAdd(3));
        // 加值并获取 类似于i+=3 结果9 返回9
        System.out.println(i.addAndGet(3));

        // 获取并更新值 类似于i*10 结果90 返回9
        System.out.println(i.getAndUpdate(operand -> operand * 10));
        // 更新值并获取 类似于i/=10 结果9 返回9
        System.out.println(i.updateAndGet(o -> o / 10));

        // 获取并计算值
        // 可以通过参数x传入外部的局部变量，因为lambda表达式要求
        System.out.println(i.getAndAccumulate(9, (left, right) -> left - right));
    }
}
